<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      // function fn() {
      //   console.log(11);
      // }

      // 立即自执行函数 --- IIFE
      // (function() {
      //   console.log(11);
      // })()

      // 全局变量i 全局作用域
      // 块级作用域： let/const + 大括号
      // 立即自执行函数 + 闭包  （即使函数调用结束，变量也不会销毁，常驻在内层里面，）
      // 闭包不会导致内层泄露，是让变量常驻在内存里面，如果变量长期占着内存，无法释放，那么就叫内存泄露。合理的使用闭包不会有内存泄露，滥用闭包才会导致内层泄露
      for (var i = 1; i < 5; i++) {
        (function (a) {
          setTimeout(() => {
            console.log(a);
          }, 0);
        })(i);
      }

      // for (let i = 1; i < 5; i++) {
      //   setTimeout(() => {
      //     console.log(a);
      //   }, 0);
      // }

      // 总结： 模块化规范的历史进程 AVALON
      // window ---> IIFE ---> AMD CMD CommonJS ---> es module
      // js分为哪几个模块 ：  BOM + DOM + ecma script
    </script>
  </body>
</html>
